package com.manda.smart.hub.common.strategy;

/**
 * 抽象策略类
 * 策略模式就是为消除大量的 IF-ELSE 结构而生
 *
 * @author hongda.li
 */
public interface Strategy<Context> {
    /**
     * 针对给定的上下文，该策略是否支持处理
     * 该方法对应 IF-ELSE 结构中的判断逻辑部分
     *
     * @param context 上下文
     * @return 是否支持
     */
    boolean isMatch(Context context);

    /**
     * 当该策略支持此上下文时，实际执行的处理逻辑
     *
     * @param context 上下文
     */
    default void ifMatch(Context context) {
    }

    /**
     * 当该策略不支持此上下文时，实际执行的处理逻辑
     *
     * @param context 上下文
     */
    default void elseNoneMatch(Context context) {
    }

    /**
     * 组合策略
     *
     * @param context 上下文
     */
    default void applyStrategy(Context context) {
        if (this.isMatch(context)) {
            this.ifMatch(context);
        } else {
            this.elseNoneMatch(context);
        }
    }
}
